//
//  main.m
//  03_集合
//
//  Created by dllo on 16/7/6.
//  Copyright © 2016年 LST. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    
#pragma mark - 不可变数组
    /* 1.数组
     * 可变数组(NSMutableArray)与不可变数组(NSArray)
     * 数组主要是有序的存放元素的集合类型, 并且可以通过下表取值
     * 数组里只能存放对象类型
     * 不可变数组只能取值
     * 可变数组可以进行增, 删, 改操作
     */
    
    // 2.初始化数组
    // <1> 初始化方法 initWithObjects 后面填入的参数一定是对象类型
    // 初始化结束以nil判别
    // 可变参数 链表(后续讲)
    // 顺序填入你需要的元素
    NSArray *array = [[NSArray alloc] initWithObjects:@"123", nil, @"234", @"345", @"456", @"567", nil];
    NSLog(@"array = %@",array);
    // <2> 构造器方法
    NSArray *arr = [NSArray arrayWithObjects:@"123", @"234", @"345", @"456", nil];
    NSLog(@"array = %@", arr);
    // <3> 字面量 同 NSString @"" NSNumber @()
    // NSArray = @[];
    // 三种初始化方式, 推荐使用字面量
    // 字面量可以识别, 对象是否为空, 但一般初始化不可以
    // 如果为空, 字面量会崩溃
    // 但是, 初始化方法会识别nil 为结束, 并不会产生问题, 造成数据丢失
    NSArray *myArray = @[@"123", @"234", @"345", @"456"];
    
    // 3.取值相关
    // <1> count 取到数组中元素个数
    NSLog(@"%ld",myArray.count);
    // <2> 通过下标去取值
    NSString *numString = [myArray objectAtIndex:0];
    NSLog(@"%@", numString);
    // <3> 语法糖 取值方式 快捷取值
    NSString *numStr = myArray[0];
    NSLog(@"%@", numStr);
    // <4> 根据值取对应的下标
    NSUInteger indexOfObject = [myArray indexOfObject:@"123"];
    NSLog(@"%ld", indexOfObject);
    // <5> 判断对象是否存在数组中
    BOOL isHaveObject = [myArray containsObject:@"123"];
    NSLog(@"%@", isHaveObject ? @"YES" : @"NO");
    // <6> 取数组中第0位的元素 / 取数组中最后一个元素(如果数组为空, 返回的对象为空, 并且不会崩溃)
    [arr firstObject];
    [arr lastObject];
    // 4.不可变数组, 改变元素(会生成新的数组, 不会在原数组基础上修改)
    // <1> 数组添加一个新的Object
    arr = [arr arrayByAddingObject:@"789"];
    NSLog(@"%@", arr);
    // <2> 数组添加另外一个数组中的所有元素
    arr = [arr arrayByAddingObjectsFromArray:array];
    NSLog(@"%@", arr);
    
#pragma mark - 可变数组
    // 可变数组
    // <1> 初始化方法同 不可变数组
    // 如果遇到可变数组, 只能使用初始化方法或者遍历构造器
    // 字面量创建方法 (不推荐使用)
    NSMutableArray *mutableArray = [@[@"0.0", @"0.0"]mutableCopy];
    // <2> 取值方式与不可变数组取值方式一样
    // <3> 可变数组改变元素
    // 数组中添加元素
    [mutableArray addObject:@"123"];
    // 数组中插入元素
    [mutableArray insertObject:@"0.0" atIndex:0];
    // 移除第0个元素
    [mutableArray removeObjectAtIndex:0];
    // 移除最后一个元素
    [mutableArray removeLastObject];
    // <4> 替换 (使用替换是, 数组对应位置不能为空)
    [mutableArray replaceObjectAtIndex:0 withObject:@"@.@"];
    /*
     - (void)addObject:(ObjectType)anObject; 添加
     - (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index; 插入
     - (void)removeLastObject; 移除最后一个元素
     - (void)removeObjectAtIndex:(NSUInteger)index;移除一个
     - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(ObjectType)anObject;
     */
    // 可变与不可变额区别
    // 1.可变是可以修改的,但不可变不可以.
    // 2.不可变调用改变方法时, 会生成对象; 可变调用改变方法时在对象本身上进行修改
    // 3.可变继承于不可变
    // 将字符串根据某个子串, 截取成数组
    // 根据哪个子串截成数组的时候, 子串就会消失
    
    NSString *urlString = @"www.a123.com";
   NSArray *urlArray = [urlString componentsSeparatedByString:@"."];
    NSLog(@"%@",urlArray);
    // 根据某个字符串, 把数组拼接成一个字符串
    NSArray *nameArray = @[@"含蓄", @"内涵", @"邮寄"];
  NSString *nameString = [nameArray componentsJoinedByString:@"&"];
    NSLog(@"%@", nameString);
    return 0;
}















